草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 在没有 C++11 的情况下使用 unique_ptr

这个问题在这里已经有了答案:unique_ptrboostequivalent?(5个答案)关闭7年前。我想将指向d的指针从一个容器传递到下一个容器。在任何时候都不会有超过一个指针的所有者(或d本身)。我希望当最后一个指针超出范围时,自动调用deleted。在C++11中,我将使用unique_ptr来完成此操作。但是,唉,我不能使用C++11。C++中最好的等价物是什么?升压就好了或者,如果没有,处理此问题的适当方法是什么?

c++ - 使用 C 头文件错误编译 Cython

所以我正在尝试用Cython包装一些C代码。我阅读了有关执行此操作的应用Cython教程(1、2),但这些教程并没有说明如何用Cython包装代码后如何编译代码,因此我有一个错误说它可以'找不到我的C代码。首先,我的cython脚本(“calcRMSD.pyx”):importnumpyasnpcimportnumpyasnpcdefexternfrom"rsmd.h":doublermsd(intn,double*x,double*y)#restofthecodeommited我试图包装的C代码(“rmsd.h”):#include#include#include#includeex

c++ - 定义数学函数并在/C++ 函数中求值

下面的伪代码描述了我想做的计算。这个想法是设计一个C/C++函数,它采用x的任何数学函数并计算前N项的总和。function(x)可以是任何函数,例如2x-1、2x、1/x等。x从zero到N不等。我认为挑战是如何设计function(x)数据结构,我不确定这是否可以在没有任何数据结构的情况下实现(这样会更好)。function(x)=2*x-1;sum_expression_to_N(function(x),N){floatsum=0.0;for(intx=0;x 最佳答案 您正在reshapestd::accumulate.(您

c++ - VS2015 无法理解静态内联函数

我在visualstudiomakefile项目的头文件中定义了以下函数,该项目最终使用msys-rtems在c中构建:staticinlineUInt32timer_now(){...其中类型UInt32是来自包含的头文件的typedef:typedefunsignedlongUInt32;由于该功能,我的智能感知出现以下问题:Intellisense建议inline不是类型名称。>错误:变量“inline”不是类型名称Intellisense认为UInt32的定义是这个函数,而不是typedefunsignedlong。如果我删除inline关键字,一切正常(除了我不想这样做,因为

c++ - 为什么 Boost Format 和 printf 在相同的格式字符串上表现不同

TheBoostFormatdocumentation说:Oneofitsgoalistoprovideareplacementforprintf,thatmeansformatcanparseaformat-stringdesignedforprintf,applyittothegivenarguments,andproducethesameresultasprintfwouldhave.当我使用相同的格式字符串比较boost:format和printf的输出时,我得到了不同的输出。在线例子是here#include#includeintmain(){boost::formatf("

c++ - 是否可以使用填充构造函数创建 std::vector<std::unique_ptr<Bar>> ?

我有一个Foo类,其成员变量类型为std::vector>,我想填写这个类的构造函数的初始化列表。这可能吗?我希望可以使用vector的填充构造函数,就像这样Foo::Foo(intn):vector>(n,unique_ptr(newBar)){}但我认为这需要std::unique_ptr的复制构造函数,它被删除了(因为它应该被删除)(unique_ptr(constunique_ptr&)=delete)。有没有更好的方法来解决这个问题? 最佳答案 既然不可复制,那就搬吧!硬编码对象的解决方案:#include#include

c++ - MASM 使用 VS 击败未优化的 .cpp 但不是未优化的 .c

我有一个非常简单的函数,它使用行主矩阵(float**)转换vector(float*):intvector_by_matrix(float**m,float*v,float*out,intsize){inti,j;floattemp;if(!m||!v||!out)return-1;for(i=0;i代码最初是使用VisualStudio(2013)C++编译器编译为C++(x64);并且没有优化非常慢(该函数在运行期间被调用数百次/数千次并且系统的大小通常很大c.size=10000)。通过将优化设置为高(O2)并将浮点模式设置为快速,性能提升非常大(x20)。但是,我决定将文件转

c++ - 如何对 WAV 文件数据执行 FFT?

我正在尝试通过检测存在的最高频率来分析文件的音频质量(压缩音频通常会被过滤到低于20KHz的频率)。我正在使用soundstretch库中的一个类读取WAV文件数据,该类将PCM样本作为float返回,然后使用fftw3库对这些样本执行FFT。然后对于每个频率(四舍五入到最接近的KHz),我将计算该频率的振幅。因此对于不包含高于16KHz频率的低质量文件,我希望在16KHz以上没有或只有很小的幅度,但是我没有得到我期望的结果。下面是我的代码:#include#include#include#include#include"include/WavFile.h"usingnamespace

c++ - 位扩展字节数组

我有一种情况需要将动态大小的字节数组放大3。例子:1010101011001100到111000111000111000111000111111000000111111000000我已经使用这里的算法生成了一个查找表。https://stackoverflow.com/a/9044057/280980staticconstuint32_tbitExpandTable[256]={00000000,0x000007,0x000038,0x00003f,0x0001c0,0x0001c7,0x0001f8,0x0001ff,0x000e00,0x000e07,0x000e38,0x000e

c++ - 将成员函数传递给需要回调的 C 接口(interface)

我有一个带有纯C接口(interface)的旧.dll,它在完成某些工作时需要回调来调用。它接受的回调类型为void(f*)(char*arg)。我正在寻找一种技巧来将C++函数对象传递到那里,以便使用存储在某处的“this”指针调用回调,类似于绑定(bind),但简单的绑定(bind)不起作用为了说明这一点:C接口(interface):typedefvoid(f*)(char*param)Callback;voidregisterCallback(Callbackc);在C++中的用法:classA{voidfunc1(){registerCallback(std::bind(&A